    #include <stdlib.h>
    #include "TXLib.h"

void draw_back();

void draw_letter_A(int x, int y, int w, int h, int hole);
//x - центр, y - низ, w - width, h - height,
//hole - тип отверстия (1 - треугольник, 2 - круг)

void draw_target(int x, int y, int r1, int r2, int r3, int r4);
//x - центр, y - центр, r1 - радиус первого круга, r2 - радиус второго круга,
// r3 - радиус третьего, r4 - радиус четвертого круга

void draw_flag(int x, int y, int w, int h, int color);
//x - флагшток, y - низ, w - width, h - height,
//color - цвет флага (0 - российский, иначе - случайный)

void draw_ship(int x, int y, int k, int radius);
//x - центр нижнего основания, y - низ, k - масштаб, radius - радиус иллюминатора

void draw_Pac_Man(int x, int y, int radius, int eye, int mouth, int circle_count, int mirror);
//x - центр Pac_Man , y - центр Pac_Man, radius - размер Pac_Man, eye - размер глаза Pac_Man
//mouth - размер рта Pac_Man (в градусах), circle_count - количество кружочков,
//mirror - зеркальное отражение (при -1)

void draw_code_blocks(int x, int y,int draw_red_cube,int draw_green_cube,int draw_blue_cube,
                      int draw_yellow_cube);
//x - центр, y - центр, draw_red_cube - рисовать ли красный куб (0 - не рисовать),
//draw_green_cube - рисовать ли зеленый куб (0 - не рисовать),
//draw_blue_cube - рисовать ли синий куб (0 - не рисовать),
//draw_yellow_cube - рисовать ли желтый куб (0 - не рисовать)

void move_Pac_Man();

    int main()
        {
        txCreateWindow (1200, 900);

        //draw_letter_A(200, 300, 200, 200, 2);
        //draw_target(200, 400, 10, 20, 30, 40);
        //draw_flag(100, 800, 50, 200, 0);
        //draw_ship(500, 800, 200, 10);
        move_Pac_Man();
        //draw_Pac_Man(900, 700, 50, 5, 30, 5, -1);
        //draw_code_blocks(800, 300, 1, 1, 1, 1);

        return 0;
        }

void draw_back()
        {
        txSetFillColor(TX_BLACK);
        txClear();
        }

void draw_letter_A(int x, int y, int w, int h, int hole)
        {
        txLine (x - w * 0.5000 , y           , x - w * 0.2273 , y - h      );
        txLine (x - w * 0.2273 , y - h       , x + w * 0.2273 , y - h      );
        txLine (x + w * 0.2273 , y - h       , x + w * 0.5000 , y          );
        txLine (x + w * 0.5000 , y           , x + w * 0.2273 , y          );
        txLine (x + w * 0.2273 , y           , x + w * 0.1364 , y - h * 0.3);
        txLine (x + w * 0.1364 , y - h * 0.3 , x - w * 0.1364 , y - h * 0.3);
        txLine (x - w * 0.1364 , y - h * 0.3 , x - w * 0.2273 , y          );
        txLine (x - w * 0.2273 , y           , x - w * 0.5000 , y          );

        if (hole == 1)
        {
        txLine (x - w * 0.0455 , y - h * 0.6 , x              , y - h * 0.8);
        txLine (x              , y - h * 0.8 , x + w * 0.0455 , y - h * 0.6);
        txLine (x + w * 0.0455 , y - h * 0.6 , x - w * 0.0455 , y - h * 0.6);
        }

        if (hole == 2)
        {
        txSetFillColor (TX_BLACK);
        txCircle(x, y - h * 0.70, w * 0.1);
        }
        }
void draw_target(int x, int y, int r1, int r2, int r3, int r4)
        {
        txSetFillColor (TX_RED);
        txCircle(x, y, r4);
        txCircle(x, y, r3);
        txCircle(x, y, r2);
        txCircle(x, y, r1);
        int maxim;
        if (r1 > r2)
            {
            maxim = r1;
            }
        else
            {
            maxim = r2;
            }
        if (r3 > maxim)
            {
            maxim = r3;
            }
        if (r4 > maxim)
            {
            maxim = r4;
            }
        txLine  (x     , y - maxim - 10, x     , y + maxim + 10);
        txLine  (x - maxim - 10, y     , x + maxim + 10, y     );
        }

void draw_flag(int x, int y, int w, int h, int color)
        {
        if (color == 0)
        {
        const COLORREF MY_WHITE = RGB (200, 200, 200);
        txSetFillColor (MY_WHITE);
        txRectangle(x, y - h, x + h * 0.9, y - h * 0.8);
        txSetFillColor (TX_BLUE);
        txRectangle(x, y - h * 0.8, x + h * 0.9, y - h * 0.6);
        txSetFillColor (TX_RED);
        txRectangle(x, y - h * 0.6, x + h * 0.9, y - h * 0.4);
        txSetColor (TX_WHITE, 5);
        txLine  (x, y, x, y - h);
        }
        else
        {
        srand(time(0));
        const COLORREF MY_COLOR_1 = RGB (rand()%256, rand()%256, rand()%256);
        const COLORREF MY_COLOR_2 = RGB (rand()%256, rand()%256, rand()%256);
        const COLORREF MY_COLOR_3 = RGB (rand()%256, rand()%256, rand()%256);
        txSetFillColor (MY_COLOR_1);
        txRectangle(x, y - h, x + h * 0.9, y - h * 0.8);
        txSetFillColor (MY_COLOR_2);
        txRectangle(x, y - h * 0.8, x + h * 0.9, y - h * 0.6);
        txSetFillColor (MY_COLOR_3);
        txRectangle(x, y - h * 0.6, x + h * 0.9, y - h * 0.4);
        txSetColor (TX_WHITE, 5);
        txLine  (x, y, x, y - h);
        }
        }

void draw_ship(int x, int y, int k, int radius)
        {
        txSetColor (TX_DARKGRAY, 3);
        txLine  (x - k * 0.55, y, x + k * 0.55, y);
        txLine  (x - k * 0.75, y - k * 0.20, x + k * 0.75, y - k * 0.20);
        txLine  (x + k * 0.35, y - k * 0.30, x + k * 0.75, y - k * 0.30);
        txLine  (x + k * 0.45, y - k * 0.40, x + k * 0.75, y - k * 0.40);
        txLine  (x + k * 0.35, y - k * 0.30, x + k * 0.35, y - k * 0.20);
        txLine  (x + k * 0.35, y - k * 0.30, x + k * 0.35, y - k * 0.20);
        txLine  (x + k * 0.45, y - k * 0.40, x + k * 0.35, y - k * 0.30);
        txLine  (x + k * 0.75, y - k * 0.40, x + k * 0.75, y - k * 0.20);
        txLine  (x - k * 0.45, y - k * 0.20, x - k * 0.25, y - k * 0.50);
        txLine  (x - k * 0.25, y - k * 0.50, x + k * 0.15, y - k * 0.50);
        txLine  (x + k * 0.15, y - k * 0.50, x + k * 0.25, y - k * 0.20);
        txArc (x - k * 0.75, y - k * 0.40, x - k * 0.35, y, 180, 90);
        txArc (x + k * 0.35, y - k * 0.40, x + k * 0.75, y, 270, 90);
        txSetColor (TX_BLACK, 1);
        txSetFillColor (TX_BLUE);
        txCircle(x - k * 0.15, y - k * 0.35, radius);
        txCircle(x - k * 0.05, y - k * 0.35, radius);
        txCircle(x + k * 0.05, y - k * 0.35, radius);
        }

void draw_Pac_Man(int x, int y, int radius, int eye, int mouth, int circle_count, int mirror)
        {
        txSetFillColor (TX_MAGENTA);
        int i;
        for (i = 1; i <= circle_count; i++)
        txCircle(x + 40 * i * mirror, y, 10);
        txSetFillColor (TX_YELLOW);
        txPie (x - radius, y - radius, x + radius, y + radius, 90 - 90 * mirror + mouth * 0.5, 360 - mouth);
        txSetFillColor (TX_BLACK);
        txCircle(x, y - radius * 0.5, eye);
        }

void move_Pac_Man()
        {
         int t = 0;
         while (t <= 200)
         {
          draw_back();
          draw_letter_A(400, 600, 200, 200, 1);
          draw_Pac_Man(-100, 200, 95, 5, 30, 50, 1);
          t += 40;
          txSleep (500);
         }

         t = 0;
         while (t <= 1300)
         {
          draw_back();
          draw_letter_A(400, 600, 200 + t % 9, 200 + t % 9, 1);
          txSetColor     (TX_WHITE);
          txSelectFont ("Arial", 54, 0, FW_BOLD);
          txDrawText  (350, 320, 450, 400, "???");
          draw_Pac_Man(t - 20, 200, t * 0.05 + 30, t % 3 + 5, (t % 3 - 2) * 10 + 30, 30, 1);
          t += 40;
          txSleep (500);
         }

         t = 0;
         while (t <= 600)
         {
          draw_back();
          draw_letter_A(400, 600, 200, 200, 1);
          draw_Pac_Man(1300 - (t + 40), 505, 95, t % 3 + 5, 30, 0, -1);
          t += 40;
          txSleep (500);
         }

         txSetColor     (TX_WHITE);
         txSelectFont ("Arial", 48, 0, FW_BOLD);
         txSetFillColor (TX_BLACK);
         txRectangle(100, 650, 1100, 800);
         txDrawText  (450, 600, 1200, 800, "Что-то я налопался...");
         txSleep (1500);
         txDrawText  (350, 600, 550, 800, "A?");
         txSleep (1500);
         txRectangle(100, 650, 1100, 800);
         txDrawText  (450, 600, 1200, 800, "Объелся, говорю!!!");
         txSleep (1500);
         txDrawText  (350, 600, 550, 800, "A?");
         txSleep (1500);
         txRectangle(100, 650, 1100, 800);
         txDrawText  (450, 600, 1200, 800, "Глухая тетеря!");
         txSleep (1500);
         txRectangle(100, 650, 1100, 800);
         txDrawText  (450, 600, 1200, 800, "Сейчас и тебя съем!");
         txSleep (1500);
         txDrawText  (350, 600, 550, 800, "A-а-а-а!!!");
         txSleep (2000);
         t = 0;
         while (t <= 600)
         {
          draw_back();
          draw_letter_A(400 - t, 600, 200 + t % 9, 200 + t % 9, 1);
          draw_Pac_Man(740, 505, 95, t % 3 + 5, 30, 0, -1);
          t += 40;
          txSleep (500);
         }
         draw_Pac_Man(740, 505, 95, t % 3 + 5, 30, 0, -1);
         txSetFillColor (TX_BLACK);
         txRectangle(100, 650, 1100, 800);
         txDrawText  (450, 600, 1200, 800, "Бу-га-га!!!");
        }


void draw_code_blocks(int x, int y, int draw_red_cube,int draw_green_cube,int draw_blue_cube,
                      int draw_yellow_cube)
        {
        const COLORREF MY_YELLOW = RGB (200, 200,   0);
        const COLORREF MY_WHITE = RGB (200, 200, 200);
        txSetFillColor (MY_WHITE);
        txRectangle(x - 170, y - 150, x + 170, y + 200);

        txSetColor (TX_WHITE, 1);

        if (draw_red_cube != 0)
        {
        txSetFillColor (TX_RED);
        POINT cube_red[6] = {{x - 150, y - 130}, {x - 50, y - 130}, {x - 10, y - 70}, {x - 10, y - 10}, {x - 90, y - 10}, {x - 150, y - 50}};
        txPolygon (cube_red, 6);
        txLine  (x - 50, y - 50, x -  50, y - 130);
        txLine  (x - 50, y - 50, x - 150, y -  50);
        txLine  (x - 50, y - 50, x -  10, y -  10);
        }

        if (draw_green_cube != 0)
        {
        txSetFillColor (TX_GREEN);
        POINT cube_green[6] = {{x + 150,  y - 130}, {x + 50,  y - 130}, {x + 10, y - 70}, {x + 10, y - 10}, {x + 90, y - 10}, {x + 150, y - 50}};
        txPolygon (cube_green, 6);
        txLine  (x + 50, y - 50, x +  50, y - 130);
        txLine  (x + 50, y - 50, x + 150, y -  50);
        txLine  (x + 50, y - 50, x +  10, y -  10);
        }

        if (draw_blue_cube != 0)
        {
        txSetFillColor (TX_BLUE);
        POINT cube_blue[6] = {{x + 150, y + 130}, {x + 150, y + 50}, {x + 90, y + 10}, {x + 10, y + 10}, {x + 10, y + 70}, {x + 50, y + 130}};
        txPolygon (cube_blue, 6);
        txLine  (x + 50, y + 50, x +  50, y + 130);
        txLine  (x + 50, y + 50, x + 150, y +  50);
        txLine  (x + 50, y + 50, x +  10, y +  10);
        }

        if (draw_yellow_cube != 0)
        {
        txSetFillColor (MY_YELLOW);
        POINT cube_yellow[6] = {{x - 150, y + 130}, {x - 50, y + 130}, {x - 10, y + 70}, {x - 10, y + 10}, {x - 90, y + 10}, {x - 150, y + 50}};
        txPolygon (cube_yellow, 6);
        txLine  (x - 50, y + 50, x -  50, y + 130);
        txLine  (x - 50, y + 50, x - 150, y +  50);
        txLine  (x - 50, y + 50, x -  10, y +  10);
        }

        txSetColor     (TX_BLACK);
        txSelectFont ("Arial", 54, 0, FW_BOLD);
        txDrawText  (x - 150, y + 150, x + 150, y + 190, "Code::Blocks");
        }

